From 98b6c37cf6517c2a262ed9ffc4bb66129b296018 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Thu, 5 Jun 2008 10:47:08 +0100 Subject: [PATCH] 32-on-64: Fix physaddr_bitsize computation when creating a 32b x86 compat domain. Signed-off-by: Jan Beulich Signed-off-by: Keir Fraser --- xen/arch/x86/domain.c | 6 ++++-- xen/arch/x86/domain_build.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index c3522c516c..3483efa867 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -350,8 +350,10 @@ int switch_compat(struct domain *d) } d->arch.physaddr_bitsize = - fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 1 - + (PAGE_SIZE - 2); + /* 2^n entries can be contained in guest's p2m mapping space */ + fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 3 + /* 2^n pages -> 2^(n+PAGE_SHIFT) bits */ + + PAGE_SHIFT; return 0; diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index b28ca3d235..e602b273f3 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -356,8 +356,10 @@ int __init construct_dom0( #if defined(__x86_64__) if ( is_pv_32on64_domain(d) ) d->arch.physaddr_bitsize = - fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 1 - + (PAGE_SIZE - 2); + /* 2^n entries can be contained in guest's p2m mapping space */ + fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 3 + /* 2^n pages -> 2^(n+PAGE_SHIFT) bits */ + + PAGE_SHIFT; #endif /* -- 2.30.2